package com.yeban.javase.day18.test.test3;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/11/2
 *
 * 线程安全的单例设计模式
 * 静态内部类
 * DCL （ Double Check Lock ）
 */
public class SingletonInnerClassSec {

    private static SingletonInnerClassSec instance;

    private SingletonInnerClassSec() {
        // 这里标明是谁在调用构造方法
        System.out.println("构造方法执行 -> " + Thread.currentThread().getName());
    }

    private static class InnerClass{
        private static SingletonInnerClassSec instance = new SingletonInnerClassSec();
    }

    public static SingletonInnerClassSec getInstance(){
        if (instance == null) { // 第一次检查（避免每次加锁）
            synchronized (SingletonInnerClassSec.class) {
                if (instance == null) { // 第二次检查（确保线程安全）
                    instance = new SingletonInnerClassSec();
                }
            }
        }
        return InnerClass.instance;
    }
}
